package com.itheima.demo8;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Parameter;

public class MyReflectDemo3 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException, IllegalAccessException {
        //获取class对象的成员变量

        //1.获取class字节码文件对象
        Class clazz = Class.forName("com.itheima.demo8.Student");

        //获取所有的公开的成员变量
  /*      Field[] fields = clazz.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }
*/
        //获取所有的成员变量，包括私有的
   /*     Field[] fields1 = clazz.getDeclaredFields();
        for (Field field : fields1) {
            System.out.println(field);
        }
*/
        //获取单个的成员变量（公开的）(形参为成员变量名)
        Field age = clazz.getField("age");
        System.out.println(age);

        //获取单个成员变量，私有的也可以获取
        Field name = clazz.getDeclaredField("name");
        System.out.println(name);

        //获取权限修饰符
        int modifiers = name.getModifiers();
        System.out.println(modifiers);

        //获取成员变量的名字
        String name1 = name.getName();
        System.out.println(name1);

        //获取成员变量的数据类型
        Class<?> type = name.getType();
        System.out.println(type);

        //获取成员变量记录的值
        Student s = new Student("zhangsan","nan",18,2);
        name.setAccessible(true);
        String o = (String) name.get(s);//私有的不能直接调用，需要进行暴力反射
        System.out.println(o);

        //修改对象里面记录的值
        name.set(s,"lisi");

        System.out.println(s);


    }
}
